package info.peigen.hotpot.component.gateway.socket.protocol;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <b>(ProtocolFormat)</b>
 * 协议格式
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2022/8/11
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ProtocolFormat {
    /** 数据长度(字节) */
    int length() default 0;

    /** 协议的起始位置,数组中标号,负数为从后取值 */
    int start();

    /** 协议的结束,数组中标号,负数为从后取值 */
    int end();

    /** 数据类型 */
    ProtocolDataType dataType();

    String dataTypeClass() default "";

    enum ProtocolDataType {
        /**
         * 二进制编码十进制数
         * 用4位二进制数来表示一位十进制数，4位二进制数有16种组合，从中选出10种来表示十进制数的10个数码有很多种方法，较常用的是8421 BCD码，即z位二进制数的“权”由左至右分别是8，4，2，1，所以称为8421 BCD码
         */
        BCD,
        /** Invalid */
        INV,
        BIN, BIT, HEX, ASCII, INT, DATA, ENUM, TIME, END, OBJ
    }
}